Some computer software publishers update their software applications (computer programs and data files associated with the programs) frequently. These updates often add new features to the applications as well as remove existing bugs. Several methods are commonly used to update software applications. The simplest of these is to distribute one entire software application to replace an older one. This full update method is simple, but expensive and inconvenient. Typically the software is distributed on some type of removable media, such as floppy disks or CD-ROMs, which are costly to produce and distribute. The time an end user must wait for the removable medium to arrive and the time it takes for the software application to install itself on a computer system are inconvenient. This inconvenience is compounded where updates occur frequently.
Because of the large size of many software applications it is generally not feasible to distribute such updates over computer networks, such as the Internet. When full updates of larger applications are distributed over the Internet, they often cause such high loads on servers that other users suffer slow-downs on the network, and the servers have trouble meeting the demands.
In order to bypass many of the problems associated with this type of software updating, some software publishers distribute incremental updates. These updates do not contain entire software applications, but rather they contain that information which is necessary to transform a particular version of a software application to a newer version. Among the methods available to perform such incremental software updating is binary patching, performed by programs such as RTPatch, published by Pocket Soft, Inc. A binary patcher changes those binary bits of a software application which are different in a newer version. Because many software updates involve changes to only a small portion of a software application, a binary patcher needs, in addition to the old software application, only a small data file which includes the differences between the two versions. The smaller data files distributed for a binary patch update are often less than 1% of the size of a full update, taking advantage of the large amount of redundancy in the two versions.
The use of incremental update methods allows for smaller updates which can be distributed by means which are not conducive to the distribution of full updates, such as distribution over the Internet. The smaller incremental updates also make distribution by floppy disk more feasible where a full update would have required many disks, and an incremental update may require only one.
Conventional incremental update methods, however, require that application files being updated conform exactly to a known pre-update version. Because binary updating occurs by moving and replacing selected bits of a file, any differences between the file being updated and the expected pre-update file can produce unpredictable results.
There are a variety of ways in which files containing executable code modules can be modified in order to operate more effectively on a particular operating system or a particular computer system. Two of these ways are "rebasing" and "realigning." Rebasing is the changing of information in a file in order to accommodate the file being loaded into memory at a new base address. Typically, rebasing involves changing absolute memory addresses which appear in code and data segments, so that the correct memory addresses appear. Realigning is the moving of code and data segments within a file such that the segments begin on particular numerical boundaries. Rebasing and realigning are explained in more detail below. Both of these forms of file manipulation create files which can be different from the original files installed on the system. When a software publisher wishes to update earlier versions of an application to a new version through incremental updating, the publisher generally assumes that the files being updated match one of a definite number of past versions. Update patches for these known versions can be produced and sent to users. If some of the application files have been rebased, realigned, or both, these application files will not be in a recognizable format for updating with the incremental update. Because the rebased or realigned file will generally not be available to the publisher of the incremental update, conventional incremental update methods are insufficient.
What is needed is a system for performing incremental updates to application files which have been rebased, realigned, or both.